Development of web-based computer software systems can be very complicated, and therefore difficult to accomplish. Developers of such systems often need to be familiar with a wide range of technologies for describing and implementing complex software systems, including modern object-oriented programming languages, XML and specific schemas, specific query's and transformations schemes, scripting languages, interface definition languages, process description languages, database definition and query languages, and more. For example, a typical web-based computer software system might include application logic written in an object-oriented programming language, XML for transmission of data between computer software sub-systems, SQL for storing and retrieving data in databases, and WSDL for describing the interfaces to web-based services. There are complexities, involved in getting such technologies to work effectively together, without even considering the business problem to be solved for the end user.
Translating from the requirements of a business problem to an implemented distributed solution using these technologies typically requires a good understanding of each of the various architectures and protocols that make up the solution. Furthermore, end-users expect the resulting software system to be fast, available, scalable, and secure even in the face of unpredictable demand and unreliable network connections.